@Transactional স্প্রিং ফ্রেমওয়ার্কে একটি অ্যানোটেশন, যা ডেটাবেস ট্রানজেকশন ম্যানেজমেন্ট সহজ এবং কার্যকর করে। এটি ডেভেলপারদের ম্যানুয়ালি ট্রানজেকশন পরিচালনার ঝামেলা থেকে মুক্তি দেয় এবং ডাটাবেস অপারেশনের নির্ভুলতা নিশ্চিত করে।
@Transactional এর প্রধান বৈশিষ্ট্য:
- অটোমেটিক ট্রানজেকশন ম্যানেজমেন্ট:
- স্প্রিং নিজেই ট্রানজেকশন শুরু, কমিট এবং রোলব্যাক পরিচালনা করে।
- রোলব্যাক সাপোর্ট:
- যখন কোনো এক্সেপশন ঘটে, তখন স্বয়ংক্রিয়ভাবে ট্রানজেকশন রোলব্যাক হয়।
- ডেক্লারেটিভ ট্রানজেকশন:
- কোডে অতিরিক্ত API ব্যবহার না করে কেবলমাত্র অ্যানোটেশনের মাধ্যমে ট্রানজেকশন পরিচালনা করা যায়।
- কাস্টমাইজেশন:
- ট্রানজেকশনের Propagation, Isolation Level, এবং Timeout কনফিগার করা যায়।
@Transactional ব্যবহারের ধাপসমূহ:
1. ডিপেনডেন্সি যোগ করা:
Spring JDBC বা Spring Data JPA এর জন্য Maven/Gradle ডিপেনডেন্সি যোগ করুন।
Maven Dependency:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.21</version>
</dependency>
2. কনফিগারেশন:
XML Configuration:
<tx:annotation-driven transaction-manager="transactionManager" />Java Configuration:
@Configuration @EnableTransactionManagement public class AppConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("root"); dataSource.setPassword("password"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
3. @Transactional অ্যানোটেশন ব্যবহার:
ডেটাবেজ অপারেশনে @Transactional যুক্ত করা:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class EmployeeService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional
public void addEmployeeAndDepartment() {
// Add Employee
String employeeQuery = "INSERT INTO employees (id, name, department) VALUES (?, ?, ?)";
jdbcTemplate.update(employeeQuery, 1, "John Doe", "IT");
// Simulate an exception
if (true) {
throw new RuntimeException("Simulated Exception");
}
// Add Department
String departmentQuery = "INSERT INTO departments (id, name) VALUES (?, ?)";
jdbcTemplate.update(departmentQuery, 1, "IT");
}
}
Main Class:
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
EmployeeService employeeService = context.getBean(EmployeeService.class);
try {
employeeService.addEmployeeAndDepartment();
} catch (Exception e) {
System.out.println("Transaction Rolled Back: " + e.getMessage());
}
context.close();
}
}
4. Propagation এবং Isolation Levels কনফিগার করা:
@Transactional অ্যানোটেশনের মাধ্যমে ট্রানজেকশনের আচরণ কাস্টমাইজ করা যায়।
Propagation:
REQUIRED(Default): যদি কোনো বিদ্যমান ট্রানজেকশন থাকে, সেটির অংশ হবে; না থাকলে নতুন ট্রানজেকশন শুরু হবে।REQUIRES_NEW: সবসময় নতুন ট্রানজেকশন শুরু করে।
Isolation:
READ_COMMITTED: একাধিক ট্রানজেকশন কমিট হওয়া ডেটা পড়তে পারে।SERIALIZABLE: সর্বোচ্চ লেভেলের আইসোলেশন, যেখানে ট্রানজেকশনগুলি একে অপরকে প্রভাবিত করে না।
Example:
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void addEmployeeAndDepartment() {
// Method logic
}
5. Checked এবং Unchecked Exceptions:
- Unchecked Exception (RuntimeException):
ট্রানজেকশন স্বয়ংক্রিয়ভাবে রোলব্যাক হয়। - Checked Exception:
রোলব্যাক করতে হলে@Transactional(rollbackFor = Exception.class)ব্যবহার করতে হবে।
Example:
@Transactional(rollbackFor = Exception.class)
public void addEmployee() throws Exception {
// Method logic
}
@Transactional ব্যবহার করার সুবিধা:
- সাধারণ ট্রানজেকশন ম্যানেজমেন্ট:
API বা ম্যানুয়াল ট্রানজেকশন ব্যবস্থাপনার প্রয়োজন নেই। - রোলব্যাক:
অ্যানোটেশনের মাধ্যমে স্বয়ংক্রিয় রোলব্যাক কনফিগার করা সহজ। - প্রসঙ্গভিত্তিক কাস্টমাইজেশন:
প্রয়োজন অনুযায়ী Propagation এবং Isolation Level নির্ধারণ করা যায়।
উপসংহার:
@Transactional অ্যানোটেশন Spring JDBC-তে ডাটাবেজ ট্রানজেকশন ম্যানেজমেন্টকে সহজ এবং কার্যকর করে। এটি ছোট থেকে বড় অ্যাপ্লিকেশনে নির্ভুলতা ও স্থায়িত্ব নিশ্চিত করতে সাহায্য করে।
Read more